/*******************************************************************************
  * 文件：NTC.c
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2021-01-20
  * 说明：NTC传感器驱动
*******************************************************************************/
#include "NTC.h"
#include "Hardware_IO.h"
#include "Hardware_ADC.h"
#include "main.h"

#ifdef CONFIG_DRY_FIRE

static NTCCtrl_ts sNTCCtrl;

// 分压电阻是4.7K的R-T表，FGSGND = 1;
static const RTTable_ts asRTTable1[] = 
{  
    {   20  ,   13  },
    {   21  ,   13  },
    {   22  ,   14  },
    {   23  ,   14  },
    {   24  ,   15  },
    {   25  ,   16  },
    {   26  ,   16  },
    {   27  ,   17  },
    {   28  ,   18  },
    {   29  ,   19  },
    {   30  ,   20  },
    {   31  ,   20  },
    {   32  ,   21  },
    {   33  ,   22  },
    {   34  ,   23  },
    {   35  ,   24  },
    {   36  ,   25  },
    {   37  ,   26  },
    {   38  ,   27  },
    {   39  ,   28  },
    {   40  ,   29  },
    {   41  ,   31  },
    {   42  ,   32  },
    {   43  ,   33  },
    {   44  ,   34  },
    {   45  ,   36  },
    {   46  ,   37  },
    {   47  ,   39  },
    {   48  ,   40  },
    {   49  ,   41  },
    {   50  ,   43  },
    {   51  ,   45  },
    {   52  ,   46  },
    {   53  ,   48  },
    {   54  ,   50  },
    {   55  ,   52  },
    {   56  ,   53  },
    {   57  ,   55  },
    {   58  ,   57  },
    {   59  ,   59  },
    {   60  ,   61  },
    {   61  ,   64  },
    {   62  ,   66  },
    {   63  ,   68  },
    {   64  ,   70  },
    {   65  ,   73  },
    {   66  ,   75  },
    {   67  ,   78  },
    {   68  ,   80  },
    {   69  ,   83  },
    {   70  ,   85  },
    {   71  ,   88  },
    {   72  ,   91  },
    {   73  ,   94  },
    {   74  ,   97  },
    {   75  ,   100     },
    {   76  ,   103     },
    {   77  ,   106     },
    {   78  ,   109     },
    {   79  ,   112     },
    {   80  ,   116     },
    {   81  ,   119     },
    {   82  ,   123     },
    {   83  ,   126     },
    {   84  ,   130     },
    {   85  ,   134     },
    {   86  ,   137     },
    {   87  ,   141     },
    {   88  ,   145     },
    {   89  ,   149     },
    {   90  ,   153     },
    {   91  ,   157     },
    {   92  ,   161     },
    {   93  ,   165     },
    {   94  ,   170     },
    {   95  ,   174     },
    {   96  ,   179     },
    {   97  ,   183     },
    {   98  ,   188     },
    {   99  ,   192     },
    {   100 ,   197     },
    {   101 ,   202     },
    {   102 ,   206     },
    {   103 ,   211     },
    {   104 ,   216     },
    {   105 ,   221     },
    {   106 ,   226     },
    {   107 ,   231     },
    {   108 ,   237     },
    {   109 ,   242     },
    {   110 ,   247     },
    {   111 ,   253     },
    {   112 ,   258     },
    {   113 ,   263     },
    {   114 ,   269     },
    {   115 ,   274     },
    {   116 ,   280     },
    {   117 ,   285     },
    {   118 ,   291     },
    {   119 ,   297     },
    {   120 ,   303     },
    {   121 ,   308     },
    {   122 ,   314     },
    {   123 ,   320     },
    {   124 ,   326     },
    {   125 ,   332     },
    {   126 ,   338     },
    {   127 ,   344     },
    {   128 ,   350     },
    {   129 ,   356     },
    {   130 ,   362     },
    {   131 ,   368     },
    {   132 ,   374     },
    {   133 ,   380     },
    {   134 ,   386     },
    {   135 ,   392     },
    {   136 ,   398     },
    {   137 ,   404     },
    {   138 ,   410     },
    {   139 ,   416     },
    {   140 ,   422     },
    {   141 ,   429     },
    {   142 ,   435     },
    {   143 ,   441     },
    {   144 ,   447     },
    {   145 ,   453     },
    {   146 ,   459     },
    {   147 ,   465     },
    {   148 ,   471     },
    {   149 ,   477     },
    {   150 ,   483     },
    {   151 ,   489     },
    {   152 ,   495     },
    {   153 ,   501     },
    {   154 ,   507     },
    {   155 ,   513     },
    {   156 ,   519     },
    {   157 ,   525     },
    {   158 ,   530     },
    {   159 ,   536     },
    {   160 ,   542     },
    {   161 ,   548     },
    {   162 ,   553     },
    {   163 ,   559     },
    {   164 ,   565     },
    {   165 ,   570     },
    {   166 ,   576     },
    {   167 ,   581     },
    {   168 ,   587     },
    {   169 ,   592     },
    {   170 ,   597     },
    {   171 ,   603     },
    {   172 ,   608     },
    {   173 ,   613     },
    {   174 ,   619     },
    {   175 ,   624     },
    {   176 ,   629     },
    {   177 ,   634     },
    {   178 ,   639     },
    {   179 ,   644     },
    {   180 ,   649     },
    {   181 ,   654     },
    {   182 ,   659     },
    {   183 ,   663     },
    {   184 ,   668     },
    {   185 ,   673     },
    {   186 ,   677     },
    {   187 ,   682     },
    {   188 ,   687     },
    {   189 ,   691     },
    {   190 ,   695     },
    {   191 ,   700     },
    {   192 ,   704     },
    {   193 ,   708     },
    {   194 ,   713     },
    {   195 ,   717     },
    {   196 ,   721     },
    {   197 ,   725     },
    {   198 ,   729     },
    {   199 ,   733     },
    {   200 ,   737     },
    {   201 ,   741     },
    {   202 ,   745     },
    {   203 ,   749     },
    {   204 ,   752     },
    {   205 ,   756     },
    {   206 ,   760     },
    {   207 ,   763     },
    {   208 ,   767     },
    {   209 ,   771     },
    {   210 ,   774     },
    {   211 ,   777     },
    {   212 ,   781     },
    {   213 ,   784     },
    {   214 ,   787     },
    {   215 ,   791     },
    {   216 ,   794     },
    {   217 ,   797     },
    {   218 ,   800     },
    {   219 ,   803     },
    {   220 ,   806     },
    {   221 ,   809     },
    {   222 ,   812     },
    {   223 ,   815     },
    {   224 ,   818     },
    {   225 ,   821     },
    {   226 ,   824     },
    {   227 ,   826     },
    {   228 ,   829     },
    {   229 ,   832     },
    {   230 ,   834     },
    {   231 ,   837     },
    {   232 ,   839     },
    {   233 ,   842     },
    {   234 ,   844     },
    {   235 ,   847     },
    {   236 ,   849     },
    {   237 ,   852     },
    {   238 ,   854     },
    {   239 ,   856     },
    {   240 ,   859     },
    {   241 ,   861     },
    {   242 ,   863     },
    {   243 ,   865     },
    {   244 ,   867     },
    {   245 ,   869     },
    {   246 ,   871     },
    {   247 ,   873     },
    {   248 ,   876     },
    {   249 ,   877     },
    {   250 ,   880     },
    {   251 ,   881     },
    {   252 ,   883     },
    {   253 ,   885     },
    {   254 ,   887     },
    {   255 ,   889     },
    {   256 ,   891     },
    {   257 ,   892     },
    {   258 ,   894     },
    {   259 ,   896     },
    {   260 ,   898     },
    {   261 ,   899     },
    {   262 ,   901     },
    {   263 ,   902     },
    {   264 ,   904     },
    {   265 ,   906     },
    {   266 ,   907     },
    {   267 ,   909     },
    {   268 ,   910     },
    {   269 ,   912     },
    {   270 ,   913     },
    {   271 ,   914     },
    {   272 ,   916     },
    {   273 ,   917     },
    {   274 ,   919     },
    {   275 ,   920     },
    {   276 ,   921     },
    {   277 ,   923     },
    {   278 ,   924     },
    {   279 ,   925     },
    {   280 ,   926     },
    {   281 ,   928     },
    {   282 ,   929     },
    {   283 ,   930     },
    {   284 ,   931     },
    {   285 ,   933     },
    {   286 ,   934     },
    {   287 ,   935     },
    {   288 ,   936     },
    {   289 ,   937     },
    {   290 ,   938     },
    {   291 ,   939     },
    {   292 ,   940     },
    {   293 ,   941     },
    {   294 ,   942     },
    {   295 ,   943     },
    {   296 ,   944     },
    {   297 ,   945     },
    {   298 ,   946     },
    {   299 ,   947     },
    {   300 ,   948     },
    {   301 ,   949     },
    {   302 ,   950     },
    {   303 ,   951     },
    {   304 ,   952     },
    {   305 ,   952     },
    {   306 ,   953     },
    {   307 ,   954     },
    {   308 ,   955     },
    {   309 ,   956     },
    {   310 ,   957     },
    {   311 ,   958     },
    {   312 ,   958     },
    {   313 ,   959     },
    {   314 ,   960     },
    {   315 ,   961     },
    {   316 ,   961     },
    {   317 ,   962     },
    {   318 ,   963     },
    {   319 ,   964     },
    {   320 ,   964     },
    {   321 ,   965     },
    {   322 ,   966     },
    {   323 ,   966     },
    {   324 ,   967     },
    {   325 ,   968     },
    {   326 ,   968     },
    {   327 ,   969     },
    {   328 ,   970     },
    {   329 ,   970     },
    {   330 ,   971     },
    {   331 ,   971     },
    {   332 ,   972     },
    {   333 ,   972     },
    {   334 ,   973     },
    {   335 ,   974     },
    {   336 ,   974     },
    {   337 ,   975     },
    {   338 ,   975     },
    {   339 ,   976     },
    {   340 ,   976     },
    {   341 ,   977     },
    {   342 ,   978     },
    {   343 ,   978     },
    {   344 ,   979     },
    {   345 ,   979     },
    {   346 ,   980     },
    {   347 ,   980     },
    {   348 ,   981     },
    {   349 ,   981     },
    {   350 ,   981     },

};

// 分压电阻是427.24的R-T表，FGSGND = 0;
static const RTTable_ts asRTTable2[] = 
{
    {   20  ,   1   },
    {   21  ,   1   },
    {   22  ,   1   },
    {   23  ,   1   },
    {   24  ,   1   },
    {   25  ,   1   },
    {   26  ,   2   },
    {   27  ,   2   },
    {   28  ,   2   },
    {   29  ,   2   },
    {   30  ,   2   },
    {   31  ,   2   },
    {   32  ,   2   },
    {   33  ,   2   },
    {   34  ,   2   },
    {   35  ,   2   },
    {   36  ,   2   },
    {   37  ,   2   },
    {   38  ,   3   },
    {   39  ,   3   },
    {   40  ,   3   },
    {   41  ,   3   },
    {   42  ,   3   },
    {   43  ,   3   },
    {   44  ,   3   },
    {   45  ,   3   },
    {   46  ,   3   },
    {   47  ,   4   },
    {   48  ,   4   },
    {   49  ,   4   },
    {   50  ,   4   },
    {   51  ,   4   },
    {   52  ,   4   },
    {   53  ,   5   },
    {   54  ,   5   },
    {   55  ,   5   },
    {   56  ,   5   },
    {   57  ,   5   },
    {   58  ,   5   },
    {   59  ,   6   },
    {   60  ,   6   },
    {   61  ,   6   },
    {   62  ,   6   },
    {   63  ,   7   },
    {   64  ,   7   },
    {   65  ,   7   },
    {   66  ,   7   },
    {   67  ,   8   },
    {   68  ,   8   },
    {   69  ,   8   },
    {   70  ,   8   },
    {   71  ,   9   },
    {   72  ,   9   },
    {   73  ,   9   },
    {   74  ,   10  },
    {   75  ,   10  },
    {   76  ,   10  },
    {   77  ,   11  },
    {   78  ,   11  },
    {   79  ,   11  },
    {   80  ,   12  },
    {   81  ,   12  },
    {   82  ,   13  },
    {   83  ,   13  },
    {   84  ,   13  },
    {   85  ,   14  },
    {   86  ,   14  },
    {   87  ,   15  },
    {   88  ,   15  },
    {   89  ,   16  },
    {   90  ,   16  },
    {   91  ,   17  },
    {   92  ,   17  },
    {   93  ,   18  },
    {   94  ,   18  },
    {   95  ,   19  },
    {   96  ,   19  },
    {   97  ,   20  },
    {   98  ,   20  },
    {   99  ,   21  },
    {   100 ,   22  },
    {   101 ,   22  },
    {   102 ,   23  },
    {   103 ,   24  },
    {   104 ,   24  },
    {   105 ,   25  },
    {   106 ,   26  },
    {   107 ,   26  },
    {   108 ,   27  },
    {   109 ,   28  },
    {   110 ,   29  },
    {   111 ,   30  },
    {   112 ,   30  },
    {   113 ,   31  },
    {   114 ,   32  },
    {   115 ,   33  },
    {   116 ,   34  },
    {   117 ,   35  },
    {   118 ,   36  },
    {   119 ,   37  },
    {   120 ,   38  },
    {   121 ,   39  },
    {   122 ,   40  },
    {   123 ,   41  },
    {   124 ,   42  },
    {   125 ,   43  },
    {   126 ,   44  },
    {   127 ,   45  },
    {   128 ,   46  },
    {   129 ,   47  },
    {   130 ,   48  },
    {   131 ,   50  },
    {   132 ,   51  },
    {   133 ,   52  },
    {   134 ,   53  },
    {   135 ,   55  },
    {   136 ,   56  },
    {   137 ,   57  },
    {   138 ,   59  },
    {   139 ,   60  },
    {   140 ,   61  },
    {   141 ,   63  },
    {   142 ,   64  },
    {   143 ,   66  },
    {   144 ,   67  },
    {   145 ,   69  },
    {   146 ,   70  },
    {   147 ,   72  },
    {   148 ,   74  },
    {   149 ,   75  },
    {   150 ,   77  },
    {   151 ,   79  },
    {   152 ,   80  },
    {   153 ,   82  },
    {   154 ,   84  },
    {   155 ,   86  },
    {   156 ,   87  },
    {   157 ,   89  },
    {   158 ,   91  },
    {   159 ,   93  },
    {   160 ,   95  },
    {   161 ,   97  },
    {   162 ,   99  },
    {   163 ,   101     },
    {   164 ,   103     },
    {   165 ,   105     },
    {   166 ,   107     },
    {   167 ,   109     },
    {   168 ,   111     },
    {   169 ,   113     },
    {   170 ,   116     },
    {   171 ,   118     },
    {   172 ,   120     },
    {   173 ,   122     },
    {   174 ,   125     },
    {   175 ,   127     },
    {   176 ,   129     },
    {   177 ,   132     },
    {   178 ,   134     },
    {   179 ,   137     },
    {   180 ,   139     },
    {   181 ,   142     },
    {   182 ,   144     },
    {   183 ,   147     },
    {   184 ,   149     },
    {   185 ,   152     },
    {   186 ,   154     },
    {   187 ,   157     },
    {   188 ,   160     },
    {   189 ,   163     },
    {   190 ,   165     },
    {   191 ,   168     },
    {   192 ,   171     },
    {   193 ,   174     },
    {   194 ,   176     },
    {   195 ,   179     },
    {   196 ,   182     },
    {   197 ,   185     },
    {   198 ,   188     },
    {   199 ,   191     },
    {   200 ,   194     },
    {   201 ,   197     },
    {   202 ,   200     },
    {   203 ,   203     },
    {   204 ,   206     },
    {   205 ,   209     },
    {   206 ,   212     },
    {   207 ,   215     },
    {   208 ,   219     },
    {   209 ,   222     },
    {   210 ,   225     },
    {   211 ,   228     },
    {   212 ,   231     },
    {   213 ,   235     },
    {   214 ,   238     },
    {   215 ,   241     },
    {   216 ,   244     },
    {   217 ,   248     },
    {   218 ,   251     },
    {   219 ,   254     },
    {   220 ,   258     },
    {   221 ,   261     },
    {   222 ,   265     },
    {   223 ,   268     },
    {   224 ,   272     },
    {   225 ,   275     },
    {   226 ,   278     },
    {   227 ,   282     },
    {   228 ,   285     },
    {   229 ,   289     },
    {   230 ,   292     },
    {   231 ,   296     },
    {   232 ,   299     },
    {   233 ,   303     },
    {   234 ,   307     },
    {   235 ,   310     },
    {   236 ,   314     },
    {   237 ,   317     },
    {   238 ,   321     },
    {   239 ,   325     },
    {   240 ,   328     },
    {   241 ,   332     },
    {   242 ,   335     },
    {   243 ,   339     },
    {   244 ,   343     },
    {   245 ,   346     },
    {   246 ,   350     },
    {   247 ,   354     },
    {   248 ,   357     },
    {   249 ,   361     },
    {   250 ,   365     },
    {   251 ,   369     },
    {   252 ,   372     },
    {   253 ,   376     },
    {   254 ,   379     },
    {   255 ,   383     },
    {   256 ,   387     },
    {   257 ,   391     },
    {   258 ,   394     },
    {   259 ,   398     },
    {   260 ,   402     },
    {   261 ,   405     },
    {   262 ,   409     },
    {   263 ,   413     },
    {   264 ,   416     },
    {   265 ,   420     },
    {   266 ,   424     },
    {   267 ,   427     },
    {   268 ,   431     },
    {   269 ,   435     },
    {   270 ,   438     },
    {   271 ,   442     },
    {   272 ,   445     },
    {   273 ,   449     },
    {   274 ,   453     },
    {   275 ,   457     },
    {   276 ,   460     },
    {   277 ,   464     },
    {   278 ,   467     },
    {   279 ,   471     },
    {   280 ,   474     },
    {   281 ,   478     },
    {   282 ,   482     },
    {   283 ,   485     },
    {   284 ,   489     },
    {   285 ,   493     },
    {   286 ,   496     },
    {   287 ,   499     },
    {   288 ,   503     },
    {   289 ,   506     },
    {   290 ,   510     },
    {   291 ,   513     },
    {   292 ,   517     },
    {   293 ,   521     },
    {   294 ,   524     },
    {   295 ,   528     },
    {   296 ,   531     },
    {   297 ,   534     },
    {   298 ,   537     },
    {   299 ,   541     },
    {   300 ,   544     },
    {   301 ,   547     },
    {   302 ,   551     },
    {   303 ,   554     },
    {   304 ,   558     },
    {   305 ,   561     },
    {   306 ,   564     },
    {   307 ,   567     },
    {   308 ,   571     },
    {   309 ,   574     },
    {   310 ,   577     },
    {   311 ,   581     },
    {   312 ,   584     },
    {   313 ,   587     },
    {   314 ,   590     },
    {   315 ,   593     },
    {   316 ,   597     },
    {   317 ,   599     },
    {   318 ,   602     },
    {   319 ,   606     },
    {   320 ,   609     },
    {   321 ,   612     },
    {   322 ,   615     },
    {   323 ,   618     },
    {   324 ,   621     },
    {   325 ,   624     },
    {   326 ,   627     },
    {   327 ,   630     },
    {   328 ,   633     },
    {   329 ,   636     },
    {   330 ,   638     },
    {   331 ,   641     },
    {   332 ,   644     },
    {   333 ,   647     },
    {   334 ,   650     },
    {   335 ,   653     },
    {   336 ,   656     },
    {   337 ,   659     },
    {   338 ,   662     },
    {   339 ,   665     },
    {   340 ,   667     },
    {   341 ,   670     },
    {   342 ,   673     },
    {   343 ,   675     },
    {   344 ,   678     },
    {   345 ,   680     },
    {   346 ,   683     },
    {   347 ,   685     },
    {   348 ,   689     },
    {   349 ,   691     },
    {   350 ,   693     },

};

static U16 NTC_GetTemperFromTable1(U16 u16ADC)
{
    U16 u16Index;

    if(u16ADC < asRTTable1[0].u16ADC)
    {
        // ADC小于值，温度小于20度，直接返回19度
        return 19;
    }
    else if(u16ADC > asRTTable1[ARRAY_SIZE(asRTTable1)-1].u16ADC)
    {
        // ADC大于最大值，温度大于350度，直接返回351度
        return 351;
    }
    else
    {
        // 遍历RT表，查找对应的温度
        for(u16Index = 0;u16Index < ARRAY_SIZE(asRTTable1);u16Index++)
        {
            if(u16ADC >= asRTTable1[u16Index].u16ADC && u16ADC < asRTTable1[u16Index+1].u16ADC)
            {
                return asRTTable1[u16Index].u16Temper;
            }
        }     
        
        return 0;
    }
}

static U16 NTC_GetTemperFromTable2(U16 u16ADC)
{
    U16 u16Index;

    if(u16ADC < asRTTable2[0].u16ADC)
    {
        // ADC小于值，温度小于20度，直接返回19度
        return 19;
    }
    else if(u16ADC > asRTTable2[ARRAY_SIZE(asRTTable2)-1].u16ADC)
    {
        // ADC大于最大值，温度大于350度，直接返回351度
        return 351;
    }
    else
    {
        // 遍历RT表，查找对应的温度
        for(u16Index = 0;u16Index < ARRAY_SIZE(asRTTable2);u16Index++)
        {
            if(u16ADC >= asRTTable2[u16Index].u16ADC && u16ADC < asRTTable2[u16Index+1].u16ADC)
            {
                return asRTTable2[u16Index].u16Temper;
            }
        }        
        
        return 0;
    }    
}

static void NTC_CalculateTask(void)
{
    // 采集ADC
    U16 u16NTC_ADC = Hardware_GetLeftNTC();      

    // 判断NTC是否故障
    if(u16NTC_ADC >= 1023)
    {
        // 短路故障
        sNTCCtrl.eNTCErr = eNTC_SHORT_CIRCUIT;
    }
    else if(u16NTC_ADC == 0)
    {
        // 断路故障
        sNTCCtrl.eNTCErr = eNTC_BROKEN_CIRCUIT;
    }
    else
    {
        // 正常
        sNTCCtrl.eNTCErr = eNTC_NONMAL;
    }

    // 根据下拉电阻，选择RT表，查表求温度
    if(sNTCCtrl.bFGSGND)
    {
        // 从RT表1查表
        sNTCCtrl.u16Temper = NTC_GetTemperFromTable1(u16NTC_ADC);

        // 判断是否需要切换下拉电阻
        if(sNTCCtrl.u16Temper > 234)
        {
            // 温度大于234度，切换下拉电阻为并联
            Hardware_NTCPullDownResisSwitch(0);
            sNTCCtrl.bFGSGND = FALSE;
        }
    }
    else
    {
        // 从RT表2查表
        sNTCCtrl.u16Temper = NTC_GetTemperFromTable2(u16NTC_ADC);

        // 判断是否需要切换下拉电阻
        if(sNTCCtrl.u16Temper < 234)
        {
            // 温度低于234度，切换为4.7K下拉电阻
            Hardware_NTCPullDownResisSwitch(1);
            sNTCCtrl.bFGSGND = TRUE;
        }
    }
}

U16 NTC_GetTemper(void)
{
    return sNTCCtrl.u16Temper;
}

NTCERR_te NTC_GetErrType(void)
{
    return sNTCCtrl.eNTCErr;
}

void NTC_Init(void)
{
    sNTCCtrl.eNTCErr = eNTC_NONMAL;
    sNTCCtrl.bFGSGND = TRUE;
    Hardware_NTCPullDownResisSwitch(1);

    // 启动20MS采集定时器
    OS_TimerStart(&sNTCCtrl.sTimer,20,NTC_CalculateTask);
}

#endif